/*


中国大学MOOC-翁恺-C语言程序设计习题集


08-3. 组个最小数 (20)


给定数字0-9各若干个。你可以以任意顺序排列这些数字，但必须全部使用。目标是使得最后得到的数
尽可能小（注意0不能做首位）。例如：给定两个0，两个1，三个5，一个8，
我们得到的最小的数就是10015558。

现给定数字，请编写程序输出能够组成的最小的数。

输入格式：

每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数，顺序表示我们拥有
数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50，
且至少拥有1个非0的数字。

输出格式：

在一行中输出能够组成的最小的数。

输入样例：
2 2 0 0 0 3 0 0 1 0
输出样例：
10015558


long double不够大了，因此用字符串输出

*/

#include <stdio.h>
#include <string.h>

int
main(int argc, char *argv[])
{
	int n[10];
	int i, count;

	memset(n, 0, sizeof(n));
	count = 0;
	for (i = 0; i < 10; ++i) {
		scanf("%d", &n[i]);
		count += n[i];
	}

	/* find the first min one but not zero */
	for (i = 1; i < 10; ++i) {
		if(n[i] > 0) {
			printf("%d", i);
			n[i] -= 1;
			count -= 1;
			break;
		}
	}

	for (i = 0; i < 10; ++i) {
		while (n[i]) {
			printf("%d", i);
			n[i] = n[i] - 1;
		}
	}
	printf("\n");

	return 0;
}




